package com.mars.diancan.controller;

import com.mars.diancan.VO.ProductInfoVO;
import com.mars.diancan.VO.ProductVO;
import com.mars.diancan.VO.ResultVO;
import com.mars.diancan.pojo.ProductCategory;
import com.mars.diancan.pojo.ProductInfo;
import com.mars.diancan.service.ProductCategoryService;
import com.mars.diancan.service.ProductInfoService;
import com.mars.diancan.utils.ResultVOUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 买家端的商品controller
 * @author MARS
 * @date 2018/6/21
 */
@Controller
@RequestMapping("/buyer/product")
public class BuyerProductController {

    @Autowired
    private ProductInfoService productInfoService;

    @Autowired
    private ProductCategoryService productCategoryService;

    /**
     * 获取商品列表
     */
    @GetMapping("/list")
    @ResponseBody
    public ResultVO list() {
        // 查询所有的上架商品
        List<ProductInfo> productInfoList = productInfoService.findUpAll();
        // 查询类目（一次性查询）
        // 获取categoryType的两种方式:
        // 1.增强for循环
//        List<Integer> productCategoryList = new ArrayList<>();
//        for (ProductInfo productInfo : productInfoList) {
//            productCategoryList.add(productInfo.getCategoryType());
//        }

        // 2.jdk1.8 lambda表达式
        List<Integer> categoryTypeList = productInfoList.stream().map(e -> e.getCategoryType()).collect(Collectors.toList());

        List<ProductCategory> productCategoryList = productCategoryService.findByCategoryTypeIn(categoryTypeList);
        // 数据拼装
        List<ProductVO> productVOList = new ArrayList<>();
        for (ProductCategory productCategory : productCategoryList) {
            ProductVO productVO = new ProductVO();
            productVO.setCategoryName(productCategory.getCategoryName());
            productVO.setCategoryType(productCategory.getCategoryType());

            List<ProductInfoVO> productInfoVOList = new ArrayList<>();
            for (ProductInfo productInfo : productInfoList) {
                // 判断类目是否相等
                if (productInfo.getCategoryType().equals(productCategory.getCategoryType())) {
                    ProductInfoVO productInfoVO = new ProductInfoVO();
//                    productInfoVO.setProductId(productInfo.getProductId());
//                    productInfoVO.setProductName(productInfo.getProductName());
//                    productInfoVO.setProductPrice(productInfo.getProductPrice());
//                    productInfoVO.setProductDescription(productInfo.getProductDescription());
//                    productInfoVO.setProductIcon(productInfo.getProductIcon());

                    // 利用BeanUtil工具类，进行bean对象的复制
                    BeanUtils.copyProperties(productInfo,productInfoVO);
                    productInfoVOList.add(productInfoVO);
                }
            }
            productVO.setProductInfoVOList(productInfoVOList);
            productVOList.add(productVO);
        }


//        ResultVO resultVO = new ResultVO();
//        ProductVO productVO = new ProductVO();
//        ProductInfoVO productInfoVO = new ProductInfoVO();
//        productVO.setProductInfoVOList(Arrays.asList(productInfoVO));
//        resultVO.setCode(0);
//        resultVO.setMsg("成功");
//        resultVO.setData(productVOList);
        return ResultVOUtil.success(productVOList);
    }
}
